查看原文
其他

如何提高AI算法研发效率?58是这样解决的

58AILab 2022-03-15

The following article is from 58技术 Author 陈兴振

AI 算法的价值在于提效和赋能,通过技术提高效率,优化用户体验,提升企业和平台的价值,可以说AI正在驱动行业变革。58各业务部门也在加速落地AI应用,利用AI技术更好地服务和赋能C端用户和B端商家。


12月13~14日 ,由中国科学院软件研究所和中科软科技主办的以“聚焦技术实践洞见软件未来”为主题的中国软件技术大会在北京国家会议中心举行。58同城AI Lab架构师陈兴振受邀出席,并在AI与大数据前沿会场以《基于Kubernetes的58同城深度学习平台》为主题进行了分享。


以下是分享实录,希望对大家有所帮助。


背景


58同城是中国最大的生活信息服务平台,公司主营业务包括:招聘、房产、汽车、金融、本地服务、二手物品等。B端商家通过58同城发布服务,C端用户通过58同城寻找服务。AI正在驱动行业变革,58各业务部门也在加速落地AI应用,利用AI技术更好的服务C端用户和B端商家。AI算法开发流程通常包括特征工程、模型训练、在线推理三个步骤。

为了加速AI应用落地,提高算法研发效率,我们设计并实现了58人工智能平台(WPAI,Wuba Platform of AI),旨在为全集团各业务部门赋能AI算法研发能力。WPAI提供深度学习、传统机器学习、向量检索等功能,下面将详细讲述深度学习功能的具体实现。



总体架构

深度学习平台总体架构:
① Web管理层:面向用户,提供可视化操作界面,用户通过Web页面可以完成资源申请、任务管理、模型管理、日志查看、资源查看等操作。
② 算法层:集成了深度学习的主流框架TensorFlow和PyTorch,同时还支持用户自定义的个性化模型需求。支持DNN、CNN、RNN等深度学习模型在CPU/GPU上的单机、分布式训练。
③ 集群管理层:基于Kubernets、Docker、Nvidia-Docker等组件实现,负责模型训练、在线推理等任务POD的统一调度,实现了对CPU、GPU资源的统一管理。
④ 硬件层:包括GPU、CPU、内存等资源,其中GPU包括K40、P40、T4、2080ti等不同型号,由Kubernetes统一管理,为模型训练和推理提供硬件支持。
⑤ 镜像中心:平台镜像仓库,提供PyTorch、TensorFlow、TensorFlow-Serving等不同版本镜像。
⑥ 日志中心:支持模型训练和推理日志的存储和读取。
⑦ 监控中心:基于Prometheus、Grafana实现,提供POD、Container级别的监控数据。
⑧ 在线推理服务:基于TensorFlow-Serving、gRPC和58自研的RPC框架SCF实现,向用户提供通用的模型推理接口调用。


集群资源管理


平台资源包括CPU、内存、GPU,而GPU又包括不同的型号如K40、P40、T4、2080ti,每种资源又区分离线和在线。整个资源通过Kubernetes进行统一管理,实现容器化调度。


集群离线训练资源包括两部分:平台初始资源和各个业务部门每季度采购资源。训练资源管理要实现两个目标:第一,资源能得到充分利用;第二,有采购资源的部门能优先进行模型训练。训练资源管理基于Kubernetes的ResourceQuota和PriorityClass实现,为每个部门创建私有资源池和共有资源池,私有资源池为部门采购的资源,共有资源池为部门申请能使用的资源上限,通过优先调度策略,保证部门能使用采购资源的同时资源能得到最大化利用。


在线推理资源以用户申请管理员审核的方式进行管理。用户先在TEST环境下部署测试实例,压测单个实例的QPS上限,并评估是否需要GPU,根据线上流量和压测QPS评估线上需要的资源,然后申请线上资源进行部署。线上节点部署基于Kubernetes的Deployment实现,支持亲和性调度。



离线训练


离线训练指通过深度学习框架对样本数据进行计算得到模型的过程,平台支持主流的TensorFlow和PyTorch框架,分为调试环境和训练环境。调试环境支持代码在线编辑、断点调试、代码保存及推送训练环境,减少用户修改代码重新训练模型的操作成本。训练环境提供TensorFlow、PyTorch单机和分布式训练支持及模型评测支持。训练样本数据通过58自研的网络文件系统WFS进行管理,模型文件存储在58自研的对象存储系统WOS上,训练过程中提供tensorboard可视化查看、日志查看、训练资源监控等功能。整个离线训练流程为:准备训练需要的样本数据和评测数据上传WFS -> 在调试环境使用少量样本调试模型训练代码 -> 创建训练任务申请训练资源 -> 执行训练,查看训练日志和tensorboard -> 训练结束得到模型文件和模型评测指标数据。


调试环境基于jupyter搭建了python代码在线调试功能,提供web操作界面,支持代码在线编辑、调试,支持GPU调试,模拟训练的GPU环境,与训练环境打通,调试好的代码直接推送训练环境执行训练。



调试环境按部门进行隔离,平台为每个部门分配网络文件系统目录,由业务部门自己进行维护。部门内的GPU调试容器调度在同一张GPU卡上,以节省GPU资源使用。


Tensorflow分布式训练各个节点均以容器方式运行在kubernetes集群中,任务运行时,平台对每个ps、worker节点生成RC控制器对象,同时为每个节点RC配置service,各个节点通过集群提供的Kube-DNS以service name来访问对应节点,集群在任务启动时把ps地址、worker地址、jobname、index四个分布式参数以环境变量方式写入容器中,用户通过读取环境变量配置分布式训练参数,WEB系统可查看任务运行状态,如任务运行日志、资源使用、tensorboard等。



PyTorch分布式训练整体架构和TensorFlow类似,用户通过Web系统进行资源、参数配置,平台通过Kubernetes进行训练worker节点调度。每个worker根据当前的rank值从数据集中获取对应分片的数据,训练过程中模型参数通过广播方式进行合并。训练结束后,容器内模型收集程序会将训练好的模型文件打包上传至指定位置统一管理,供用户下载分析或在线推理部署。


平台使用ImageNet ILSVRC2012数据集对resnet50模型进行了PyTorch分布式训练,4节点用时48小时,准确率达75.1%,8节点用时22.7小时,准确率达73.2%。


在线推理


在线推理实现将深度学习模型应用到生产环境,由于不同业务方模型种类和数据类型不同,所以需要一套通用的在线推理框架。平台在线推理框架包括SCF服务、推理实例、Kubernetes集群和Web管理系统。SCF服务提供通用的RPC服务调用,热加载用户上传的模型协议解析jar包提供统一的推理调用接口,将接收到的请求转发到后端推理实例上,实现负载均衡。推理实例通过Kubernetes部署,以容器化的方式提供远端服务调用,部署在CPU或GPU上,执行推理计算。用户通过Web管理系统完成协议解析Jar包上传、模型部署、节点的扩缩容等操作。



TensorFlow在线推理基于TensorFlow-Serving实现,Kubernetes通过Deployment提供模型部署和滚动更新操作。对外使用SCF服务作为服务接入层,SCF服务加载模型的协议解析jar包兼容不同模型的多种协议实体,提供统一的接口调用。同时SCF服务Watch Kubernetes集群同步POD IP变化,并维护不同任务对应的后端TensorFlow-Serving节点IP列表关系,使用加权轮询负载均衡算法将流量均匀转发到后端TensorFlow-Serving节点上。


PyTorch在线推理基于gRPC、Seldon实现,提供同步和异步调用接口, 用户在web上操作部署后,Kubernetes创建对应服务数量的PyTorch推理节点,容器将用户模型推理封装为gRPC服务对外发布。用户可以自行定义模型调用方式、模型推理前后预处理程序,方便用户进行模型接入,提高推理效率。



对于用户自定义的模型或应用,平台提供了自定义任务支持。用户提供自定义的模型或应用程序,选择基础镜像,对自定义应用进行封装,然后在平台进行部署上线即可调用SCF服务接口。


对于模型的在线推理平台进行了一系列优化措施。GPU上推理通过应用TensorRT加速组件和模型混合部署提升了GPU吞吐能力。GPU上的TensorRT组件应用可以参考文章《如何利用TensorRT加速GPU上深度学习模型推理》(详见阅读原文),GPU上模型混合部署通过Kubernetes将多个模型部署在一张GPU卡上。由于Kubernetes对GPU是按卡粒度来调度,单卡上多个模型混合部署对线上的小流量模型应用能有效节省GPU资源,提升GPU使用率。CPU上推理应用了Intel的MKL-DNN库,通过增加CPU资源的使用来提升模型的推理性能,降低服务耗时,应用在业务部门的OCR识别和低质文本识别模型上后,服务耗时降低50%。 


总结


本文对58同城深度学习平台架构、集群资源管理、离线训练和在线推理进行了系统介绍。当前集团各业务部门对AI技术的投入正逐步提高,我们会持续对平台进行功能和性能的优化,秉承开放协作原则,与集团业务部门一起提升平台能力。
我们也正在寻求人才,一起打造更强大的AI系统,感兴趣请点击此处


陈兴振


58同城 AI Lab架构师


主要负责AI算法平台及周围子系统的建设工作


END


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存